﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HerGoS.ControlsUI;
using HerGoS.Administration.Engine;
using HerGoS.Administration.Entities;

namespace HerGoS.WebUI.Administracion.Usuarios
{
    public partial class Usuarios_ABM : PageBase
    {
        #region Propiedades

        public Usuario Usuario
        {
            get
            {
                if (ViewState["Usuario"] != null)
                    return (Usuario)ViewState["Usuario"];
                return null;
            }
            set
            {
                ViewState["Usuario"] = value;
            }

        }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                LoadCombos();
                if (Request.QueryString["id"] == null)
                {
                   
                    Usuario = new Usuario();
                    this.lstDisponibles.DataSource = GestorRoles.Consultar();
                    this.lstDisponibles.DataTextField = "Nombre";
                    this.lstDisponibles.DataValueField = "OID";
                    this.lstDisponibles.DataBind();
                }
                else
                {
                    var Id = Convert.ToInt32(Request.QueryString["id"]);
                    Usuario = GestorUsuario.Obtener(Id);
                    this.cboPersonas.Items.Add(new ListItem { Value = Usuario.OID.ToString() , Text = Usuario.NombresYApellidos});
                    this.cboPersonas.SelectedValue = Usuario.OID.ToString();
                    this.cboPersonas.Enabled = false;
                    this.txtUsuario.Text = Usuario.Nick ;
                    this.txtUsuario.Enabled = Usuario.Nick == string.Empty ? true : false;
                    this.txtClave.Text = Usuario.Clave;
                    this.txtClave.Attributes.Add("value", txtClave.Text);
                    //this.cboArea.SelectedValue = Usuario.Area == null ? "0" : Usuario.Area.OID.ToString();
                    //this.cboPuesto.SelectedValue = Usuario.Puesto == null ? "0" : Usuario.Puesto.OID.ToString();
                    this.chkBloqueado.Checked = Usuario.Bloqueado;
                    this.chkSuperAdmin.Checked = Usuario.IsSuperAdmin;
                 
                    //Opero con Roles 
                    if (Usuario.Roles.Count > 0)
                    {
                        List<Rol> rolesAsignados = Usuario.Roles;
                        this.lstAsignados.DataSource = Usuario.Roles;
                        this.lstAsignados.DataTextField = "Nombre";
                        this.lstAsignados.DataValueField = "OID";
                        this.lstAsignados.DataBind();

                        // a los roles disponibles les resto los asignados
                        var todoslosRoles = GestorRoles.Consultar();

                        foreach (Rol rol in rolesAsignados)
                        {
                            todoslosRoles.RemoveAll(x => x.Nombre == rol.Nombre);

                        }

                        this.lstDisponibles.DataSource = todoslosRoles;
                        this.lstDisponibles.DataTextField = "Nombre";
                        this.lstDisponibles.DataValueField = "OID";
                        this.lstDisponibles.DataBind();

                    }
                    else
                    {
                        this.lstDisponibles.DataSource = GestorRoles.Consultar();
                        this.lstDisponibles.DataTextField = "Nombre";
                        this.lstDisponibles.DataValueField = "OID";
                        this.lstDisponibles.DataBind();

                    }


                }
                Initialize();
               
            }


        }

        void Initialize()
        {
            this.btnGuardar.Settings(new ButtonExtText());
            this.btnCerrar.Settings(new ButtonExtText());
            this.uxLeftBtn.Settings(new ButtonExtText());
            this.uxRightBtn.Settings(new ButtonExtText());
        }


        private void LoadCombos()
        {
         
                var personasSource = from x in GestorPersona.ObtenerPersonassinUsuario()
                                     select new
                                     {
                                         x.OID,
                                         ApyNombre = String.Format("{0} ,  {1}", x.Apellidos, x.Nombres),

                                     };


                this.cboPersonas.DataSource = personasSource;
                cboPersonas.DataTextField = "ApyNombre";
                cboPersonas.DataValueField = "OID";
                cboPersonas.DataBind();
                cboPersonas.Items.Insert(0, new ListItem("--Ninguno-- ", "0"));
                        
            
       
           

        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                Usuario.OID = this.cboPersonas.SelectedValue.ToInteger();
                Usuario.Nick = this.txtUsuario.Text;
                Usuario.Clave = this.txtClave.Text;
                Usuario.Bloqueado = this.chkBloqueado.Checked;
                Usuario.IsSuperAdmin = this.chkSuperAdmin.Checked;

                Usuario.Roles = new List<Rol>();
                if (this.lstAsignados.Items.Count > 0)
                {
                    foreach (ListItem item in lstAsignados.Items)
                    {
                        Rol rol = new Rol();
                        rol.Nombre = item.Text;
                        rol.Codigo = item.Text;
                        rol.OID = item.Value.ToInteger();

                        Usuario.Roles.Add( rol);
                    }
                }

                GestorUsuario.Guardar(Usuario);

                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", "parent.IntervaloCerrarPopup();", true);

            }
            catch (Exception ex)
            { }

        }
        protected void btnCerrar_Click(object sender, EventArgs e)
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", "parent.CerrarPopup();", true);
        }

        protected void uxRightBtn_Click(object sender, EventArgs e)
        {
          while(this.lstDisponibles.Items.Count > 0 && lstDisponibles.SelectedItem != null)
          {
            ListItem selectedItem = lstDisponibles.SelectedItem;
            selectedItem.Selected = false;
            this.lstAsignados.Items.Add(selectedItem);
            lstDisponibles.Items.Remove(selectedItem);
          }

        }

        protected void uxLeftBtn_Click(object sender, EventArgs e)
        {
            while (lstAsignados.Items.Count > 0 && lstAsignados.SelectedItem != null)
            {
                ListItem selectedItem = lstAsignados.SelectedItem;
                selectedItem.Selected = false;
                lstDisponibles.Items.Add(selectedItem);
                lstAsignados.Items.Remove(selectedItem);
            }
        }
    }
}